// s = "leetcode"
// 返回 0

// s = "loveleetcode"
// 返回 2

function f1 (str) {
    const map = {}; // { 'l': 1, 'e': 3, 'c': 1 }  { 'c': 1, 'l': 1, 'e': 3 }
    for (const letter of str) {
        if (!map[letter]) {
            map[letter] = 1;
        } else {
            map[letter]++;
        }
    }

    // const arr = [];
    // for (const letter in map) {
    //     if (map[letter] === 1) {
    //         arr.push(str.indexOf(letter));
    //     }
    // }
    // keys >> value
    // value >>>/ key
    const arr = Object
        .keys(map)
        .filter((letter) => map[letter] === 1)
        .map((letter) => str.indexOf(letter));
    if (!arr.length) {
        return -1;
    }
    return Math.min(...arr);
}

// console.log(f1('leetcode')); // 0
// console.log(f1('loveleetcode')); // 2
function f2 (str) {
    const map = {}; // { 'l': [1, 0], 'e': [3, 1], 'c': [1, 4] } 
    for (let i = 0; i < str.length; i++) {
        const letter = str[i];
        if (!map[letter]) {
            map[letter] = [1, i];
        } else {
            map[letter][0]++;
        }
    }

    // 数组中挑选直接arr.filter()
    // 对象中挑选Object.keys(obj).filter()
    const arr = Object
        .keys(map) // ['l', 'e', 't', 'c', 'o', 'd']
        .filter((letter) => map[letter][0] === 1) // ['l', 't', 'c', 'o', 'd']
        .map((letter) => map[letter][1]); // [0, 3, 4, 5, 6]

    if (!arr.length) {
        return -1;
    }
    
    return Math.min(...arr);
}

function f3 (s) {
    for (let i = 0; i < s.length; i++) {
        const a = s[i];
        if (s.indexOf(a) === i && i === s.lastIndexOf(a)) {
            return i
        }
    }
    return -1;
}

function f4 (s) {
    // 'leetcode'
    for (let i = 0; i < s.length; i++) {
        const tmp = s.split(s[i]);
        if (tmp.length === 2) {
            return i;
        }
    }
    return -1;
}

// function p (name, cb, count = 100) {
//     console.time(name);
//     for (let i = 0; i < count; i++) {
//         cb();
//     }
//     console.timeEnd(name);
// }

function p(name, cb, count = 1) {
    console.time(name);
    for (let i = 0; i < count; i++) {
        cb(s);
    }
    console.timeEnd(name);
}
const basic = 'asdfghjklkqwqewrtyuyio';
const s = new Array(50000).fill(0).map(() => basic[Math.floor(Math.random() * 22)]).join('');

p('1', f1);

p('2', f2);

p('3', f3);

// p('4', f4);

// console.log(f4('leetcode')); // 0
// console.log(f4('loveleetcode')); // 2